#Install package

install.packages("ggforce")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/domin/AppData/Local/R/win-library/4.2’
(as ‘lib’ is unspecified)
also installing the dependencies ‘tweenr’, ‘polyclip’, ‘systemfonts’, ‘RcppEigen’

trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/tweenr_2.0.2.zip'
Content type 'application/zip' length 527120 bytes (514 KB)
downloaded 514 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/polyclip_1.10-4.zip'
Content type 'application/zip' length 390320 bytes (381 KB)
downloaded 381 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/systemfonts_1.0.4.zip'
Content type 'application/zip' length 1042791 bytes (1018 KB)
downloaded 1018 KB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/RcppEigen_0.3.3.9.3.zip'
Content type 'application/zip' length 2276995 bytes (2.2 MB)
downloaded 2.2 MB

trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/ggforce_0.4.1.zip'
Content type 'application/zip' length 2160332 bytes (2.1 MB)
downloaded 2.1 MB
package ‘tweenr’ successfully unpacked and MD5 sums checked
package ‘polyclip’ successfully unpacked and MD5 sums checked
package ‘systemfonts’ successfully unpacked and MD5 sums checked
package ‘RcppEigen’ successfully unpacked and MD5 sums checked
package ‘ggforce’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\domin\AppData\Local\Temp\RtmpQP42XL\downloaded_packages

#Loading Libraries

library(viridis)
Loading required package: viridisLite

Attaching package: ‘viridis’

The following object is masked from ‘package:maps’:

    unemp

#tidyverse error

install.packages("rlang")
Error in install.packages : Updating loaded packages

#Importing tick Pathogen data

Tick_Pathogens <- loadByProduct(dpID ="DP1.10092.001", site = c("SCBI", "UKFS"), package = c("basic"))

#extracting THE tick data

tick_pathogen <- Tick_Pathogens$tck_pathogen

#extracting additonal tick data test

random_test <- Tick_Pathogens$categoricalCodes_10092
detailed_tick <-  random_test
categorical_codes <- detailed_tick
issues_log <- Tick_Pathogens$issueLog_10092
read_me <- Tick_Pathogens$readme_10092
validation1 <- Tick_Pathogens$validation_10092
variable1 <- Tick_Pathogens$variables_10092

#converting date to decimal

decimal_date(tick_pathogen$collectDate)
   [1] 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438
  [11] 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438
  [21] 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438
  [31] 2014.438 2014.438 2014.438 2014.438 2014.438 2014.438 2014.440 2014.440 2014.440 2014.440
  [41] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
  [51] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
  [61] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
  [71] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
  [81] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
  [91] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [101] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [111] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [121] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [131] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [141] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [151] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [161] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [171] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [181] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [191] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [201] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [211] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [221] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [231] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [241] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [251] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [261] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [271] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [281] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [291] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [301] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [311] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [321] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [331] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [341] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [351] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [361] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [371] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [381] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [391] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [401] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [411] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [421] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [431] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [441] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [451] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [461] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [471] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [481] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [491] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [501] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [511] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [521] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [531] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [541] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [551] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [561] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [571] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [581] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [591] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [601] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [611] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [621] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [631] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [641] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [651] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [661] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [671] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [681] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [691] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [701] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [711] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [721] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [731] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [741] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [751] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [761] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [771] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [781] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [791] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [801] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [811] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [821] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [831] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [841] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [851] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [861] 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440 2014.440
 [871] 2014.440 2014.440 2014.440 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [881] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [891] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [901] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [911] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [921] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [931] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [941] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [951] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [961] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [971] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [981] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [991] 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441 2014.441
 [ reached getOption("max.print") -- omitted 34007 entries ]

#New column for decimal date

tick_pathogen <- 
tick_pathogen%>%
  mutate(decimaldate = decimal_date(tick_pathogen$collectDate))
tick_pathogen <- 
tick_pathogen%>%
  mutate(decimaldate = decimal_date(tick_pathogen$collectDate))

#removing NA data

tick_pathogen <- filter(tick_pathogen, !is.na(tick_pathogen$testResult))

#remove unwanted data

tick_pathogen <-tick_pathogen %>%
  select(siteID, plotID, plotType, nlcdClass, decimalLatitude, decimalLongitude, elevation, collectDate, testedDate, individualCount, testResult, testPathogenName)

#saving the data

save(tick_pathogen, file = "data/tick_pathogen.Rdata")
load("data/tick_pathogen.Rdata")

#graphing some data

ggplot(tick_pathogen)+
  geom_line(mapping = aes(x = elevation, y = testResult, color = siteID))
ggplot(tick_pathogen)+
  geom_point(mapping = aes(x = collectDate, y = testResult, color = siteID))
ggplot(tick_pathogen)+
  geom_col(mapping = aes(x = testPathogenName, y = testResult, fill = siteID), position = "dodge")+
  facet_wrap(~testPathogenName)+
  theme(axis.text.x = element_blank())

NA

#for tilting the x axis labels

theme(axis.text.x = element_text(angle = 45))

#attempt 1 filter data only SCBI #filtering data

filter(tick_pathogen, testResult == "Positive", siteID == "SCBI")

#convert postitve and negtive to 0 and 1

tick_pathogen <- 
tick_pathogen%>%
  mutate(testResultnum = ifelse(tick_pathogen$testResult == "Positive",1,0))

#filter sites seperate

site1 <- filter(tick_pathogen, siteID == "SCBI")
site2 <- filter(tick_pathogen, siteID == "UKFS")

#new data sets for invidual diseases

borrelia <- filter(site1, testPathogenName == "Borrelia sp.")
borrelia2 <- filter(site2, testPathogenName == "Borrelia sp.")

#save the seperate site data

save(site1, file = "data/site1.Rdata")
load("data/tick_pathogen.Rdata")

#graph tests #graphs using filters

ggplot(data = site1)+
  geom_jitter(mapping = aes(decimaldate,testResultnum,color = testResult))+
  facet_wrap(~testPathogenName)+
  theme(axis.text.x = element_blank())+
  theme(strip.text = element_text(size = 6, face = "bold"))

NA
ggplot(data = site2)+
  geom_jitter(mapping = aes(decimaldate,testResultnum,color = testResult))+
  facet_wrap(~testPathogenName)+
  theme(axis.text.x = element_blank())+
  theme(strip.text = element_text(size = 8, face = "bold"))

#graph with single disease site 1

ggplot(borrelia)+
  geom_jitter(mapping = aes(x = decimaldate, y = testResultnum, color = testResult))+
  facet_wrap(~testResult)

#graph with single disease site 2

ggplot(borrelia2)+
  geom_jitter(mapping = aes(x = decimaldate, y = testResultnum, color = testResult))+
  facet_wrap(~testResult)

##WIPS #atempt with zooming one year(doesnt work)

filter(data = borrelia (x = date "2017-03-22", date <= "2017-09-15")+
  ggplot(borrelia)+
  geom_point(mapping = aes(x = decimaldate, y = testResultnum, color = testResult))+
  facet_wrap(~testResult)
  

#graph seperate by site working on by year (doesnt work)

ggplot(site1)+
  geom_point(mapping = aes(x = decimaldate, y = testPathogenName))+
  geom_line()+
  scale_x_date(date_minor_breaks = "1 year")

#graph time series for disease over time want in blocks #color by disease (on y)on axis no test result only data,blocked off (works kinda)

ggplot(tick_pathogen)+
  geom_point(mapping = aes(x = testResultnum, y = decimaldate, color = testPathogenName))+
  facet_wrap(~testResultnum)

NA

#seperate year borrelia1 only

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2014, 2016))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2016, 2017))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2017, 2018))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2018, 2019))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2019, 2020))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2020, 2021))

ggplot(data = borrelia1, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2021, 2022))

#seperate year borrelia2 only

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2015, 2016))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2016, 2017))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2017, 2018))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2018, 2019))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2019, 2020))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2020, 2021))

ggplot(data = borrelia2, aes(x = decimaldate, y = testResultnum, color = testResultnum))+
  geom_jitter()+ 
  facet_zoom(xlim = c(2021, 2022))

#zoom with all the diseases from site1

ggplot(data = site1, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2014, 2016))

ggplot(data = site1, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2016, 2018))

ggplot(data = site1, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2018, 2019))

ggplot(data = site1, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2019, 2021))

ggplot(data = site1, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2021, 2022))

#zoom all disease from site2

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "C")+
  facet_zoom(xlim = c(2015, 2016))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+
  scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2016, 2017))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
   scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2017, 2018))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2018, 2019))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2019, 2020))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2020, 2021))

ggplot(data = site2, aes(x = decimaldate, y = testResultnum, color = testPathogenName))+
  geom_jitter()+ 
  scale_color_viridis(discrete = TRUE, option = "H")+
  facet_zoom(xlim = c(2021, 2022))

#maps #need the google key

register_google(key = "AIzaSyAFj9wnW3354ZdqUCJyM8pn8AQWg7MJc3Y")

#map of site2 location kanas

ks <- c(lon = -95.19215, lat = 39.040431)
ks_map <- get_map(location = ks, zoom = 15)
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=15&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=15&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx]8;;>
ggmap(ks_map)

#map again zoomed out site2

ks <- c(lon = -95.19215, lat = 39.040431)
ks_map3 <- get_map(location = ks, zoom = 6)
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx]8;;>
ggmap(ks_map3)

#map with locaiton point kanas

ks_map2 <- get_map(location = `ks`, source = "stamen",zoom = 9, maptype = "terrain")
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=9&size=640x640&scale=2&maptype=terrain&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=39.040431,-95.19215&zoom=9&size=640x640&scale=2&maptype=terrain&key=xxx]8;;>
ℹ Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL.
ggmap(ks_map2)


ggmap(ks_map2) +
  geom_point(data = ks, mapping = aes(x = lat, y = lon), size = 10)
Error in `fortify()`:
! `data` must be a <data.frame>, or an object coercible by `fortify()`, not a numeric vector.
Backtrace:
 1. ggplot2::geom_point(...)
 2. ggplot2::layer(...)
 4. ggplot2:::fortify.default(data)

#maps of site1 virginia

va <- c(lon = -78.1454, lat = 38.8935)
va_map <- get_map(location = va, zoom = 10)
ℹ <]8;;https://maps.googleapis.com/maps/api/staticmap?center=38.8935,-78.1454&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxxhttps://maps.googleapis.com/maps/api/staticmap?center=38.8935,-78.1454&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx]8;;>
ggmap(va_map)

#map with location data point (virginia)

LS0tDQp0aXRsZTogInRpY2sgcGF0aG9nZW4iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojSW5zdGFsbCBwYWNrYWdlDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoImx1YnJpZGF0ZSIpDQppbnN0YWxsLnBhY2thZ2VzKCJzY2FsZXMiKQ0KaW5zdGFsbC5wYWNrYWdlcygiZ2dmb3JjZSIpDQpgYGANCg0KI0xvYWRpbmcgTGlicmFyaWVzDQpgYGB7cn0NCmxpYnJhcnkobmVvblV0aWxpdGllcykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJhc3RlcikNCmxpYnJhcnkocmdkYWwpDQpsaWJyYXJ5KGdnZm9yY2UpDQpsaWJyYXJ5KG1hcHMpDQpsaWJyYXJ5KG1hcGRhdGEpDQpsaWJyYXJ5KCJnZ21hcCIpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KHZpcmlkaXNMaXRlKQ0KYGBgDQoNCiN0aWR5dmVyc2UgZXJyb3INCmBgYHtyfQ0KcmVtb3ZlLnBhY2thZ2VzKCJybGFuZyIpDQppbnN0YWxsLnBhY2thZ2VzKCJybGFuZyIpDQpgYGANCg0KI0ltcG9ydGluZyB0aWNrIFBhdGhvZ2VuIGRhdGENCmBgYHtyfQ0KVGlja19QYXRob2dlbnMgPC0gbG9hZEJ5UHJvZHVjdChkcElEID0iRFAxLjEwMDkyLjAwMSIsIHNpdGUgPSBjKCJTQ0JJIiwgIlVLRlMiKSwgcGFja2FnZSA9IGMoImJhc2ljIikpDQpgYGANCg0KI2V4dHJhY3RpbmcgVEhFIHRpY2sgZGF0YQ0KYGBge3J9DQp0aWNrX3BhdGhvZ2VuIDwtIFRpY2tfUGF0aG9nZW5zJHRja19wYXRob2dlbg0KYGBgDQoNCiNleHRyYWN0aW5nIGFkZGl0b25hbCB0aWNrIGRhdGEgdGVzdA0KYGBge3J9DQpyYW5kb21fdGVzdCA8LSBUaWNrX1BhdGhvZ2VucyRjYXRlZ29yaWNhbENvZGVzXzEwMDkyDQpkZXRhaWxlZF90aWNrIDwtICByYW5kb21fdGVzdA0KY2F0ZWdvcmljYWxfY29kZXMgPC0gZGV0YWlsZWRfdGljaw0KaXNzdWVzX2xvZyA8LSBUaWNrX1BhdGhvZ2VucyRpc3N1ZUxvZ18xMDA5Mg0KcmVhZF9tZSA8LSBUaWNrX1BhdGhvZ2VucyRyZWFkbWVfMTAwOTINCnZhbGlkYXRpb24xIDwtIFRpY2tfUGF0aG9nZW5zJHZhbGlkYXRpb25fMTAwOTINCnZhcmlhYmxlMSA8LSBUaWNrX1BhdGhvZ2VucyR2YXJpYWJsZXNfMTAwOTINCg0KYGBgDQoNCg0KI2NvbnZlcnRpbmcgZGF0ZSB0byBkZWNpbWFsIA0KYGBge3J9DQpkZWNpbWFsX2RhdGUodGlja19wYXRob2dlbiRjb2xsZWN0RGF0ZSkNCmBgYA0KI05ldyBjb2x1bW4gZm9yIGRlY2ltYWwgZGF0ZSANCmBgYHtyfQ0KdGlja19wYXRob2dlbiA8LSANCnRpY2tfcGF0aG9nZW4lPiUNCiAgbXV0YXRlKGRlY2ltYWxkYXRlID0gZGVjaW1hbF9kYXRlKHRpY2tfcGF0aG9nZW4kY29sbGVjdERhdGUpKQ0KYGBgDQoNCmBgYHtyfQ0KdGlja19wYXRob2dlbiA8LSANCnRpY2tfcGF0aG9nZW4lPiUNCiAgbXV0YXRlKGRlY2ltYWxkYXRlID0gZGVjaW1hbF9kYXRlKHRpY2tfcGF0aG9nZW4kY29sbGVjdERhdGUpKQ0KYGBgDQoNCiNyZW1vdmluZyBOQSBkYXRhDQpgYGB7cn0NCnRpY2tfcGF0aG9nZW4gPC0gZmlsdGVyKHRpY2tfcGF0aG9nZW4sICFpcy5uYSh0aWNrX3BhdGhvZ2VuJHRlc3RSZXN1bHQpKQ0KDQpgYGANCg0KI3JlbW92ZSB1bndhbnRlZCBkYXRhDQpgYGB7cn0NCnRpY2tfcGF0aG9nZW4gPC10aWNrX3BhdGhvZ2VuICU+JQ0KICBzZWxlY3Qoc2l0ZUlELCBwbG90SUQsIHBsb3RUeXBlLCBubGNkQ2xhc3MsIGRlY2ltYWxMYXRpdHVkZSwgZGVjaW1hbExvbmdpdHVkZSwgZWxldmF0aW9uLCBjb2xsZWN0RGF0ZSwgdGVzdGVkRGF0ZSwgaW5kaXZpZHVhbENvdW50LCB0ZXN0UmVzdWx0LCB0ZXN0UGF0aG9nZW5OYW1lKQ0KYGBgDQoNCiNzYXZpbmcgdGhlIGRhdGENCmBgYHtyfQ0Kc2F2ZSh0aWNrX3BhdGhvZ2VuLCBmaWxlID0gImRhdGEvdGlja19wYXRob2dlbi5SZGF0YSIpDQpsb2FkKCJkYXRhL3RpY2tfcGF0aG9nZW4uUmRhdGEiKQ0KDQpgYGANCg0KI2dyYXBoaW5nIHNvbWUgZGF0YSANCmBgYHtyfQ0KZ2dwbG90KHRpY2tfcGF0aG9nZW4pKw0KICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZWxldmF0aW9uLCB5ID0gdGVzdFJlc3VsdCwgY29sb3IgPSBzaXRlSUQpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHRpY2tfcGF0aG9nZW4pKw0KICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGNvbGxlY3REYXRlLCB5ID0gdGVzdFJlc3VsdCwgY29sb3IgPSBzaXRlSUQpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHRpY2tfcGF0aG9nZW4pKw0KICBnZW9tX2NvbChtYXBwaW5nID0gYWVzKHggPSB0ZXN0UGF0aG9nZW5OYW1lLCB5ID0gdGVzdFJlc3VsdCwgZmlsbCA9IHNpdGVJRCksIHBvc2l0aW9uID0gImRvZGdlIikrDQogIGZhY2V0X3dyYXAofnRlc3RQYXRob2dlbk5hbWUpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkNCiAgDQpgYGANCiNmb3IgdGlsdGluZyB0aGUgeCBheGlzIGxhYmVscw0KYGBge3J9DQp0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1KSkNCmBgYA0KDQojYXR0ZW1wdCAxIGZpbHRlciBkYXRhIG9ubHkgU0NCSQ0KI2ZpbHRlcmluZyBkYXRhDQpgYGB7cn0NCmZpbHRlcih0aWNrX3BhdGhvZ2VuLCB0ZXN0UmVzdWx0ID09ICJQb3NpdGl2ZSIsIHNpdGVJRCA9PSAiU0NCSSIpDQpgYGANCg0KI2NvbnZlcnQgcG9zdGl0dmUgYW5kIG5lZ3RpdmUgdG8gMCBhbmQgMSANCmBgYHtyfQ0KdGlja19wYXRob2dlbiA8LSANCnRpY2tfcGF0aG9nZW4lPiUNCiAgbXV0YXRlKHRlc3RSZXN1bHRudW0gPSBpZmVsc2UodGlja19wYXRob2dlbiR0ZXN0UmVzdWx0ID09ICJQb3NpdGl2ZSIsMSwwKSkNCmBgYA0KDQogDQojZmlsdGVyIHNpdGVzIHNlcGVyYXRlIA0KYGBge3J9DQpzaXRlMSA8LSBmaWx0ZXIodGlja19wYXRob2dlbiwgc2l0ZUlEID09ICJTQ0JJIikNCmBgYA0KDQpgYGB7cn0NCnNpdGUyIDwtIGZpbHRlcih0aWNrX3BhdGhvZ2VuLCBzaXRlSUQgPT0gIlVLRlMiKQ0KYGBgDQoNCiNuZXcgZGF0YSBzZXRzIGZvciBpbnZpZHVhbCBkaXNlYXNlcw0KYGBge3J9DQpib3JyZWxpYSA8LSBmaWx0ZXIoc2l0ZTEsIHRlc3RQYXRob2dlbk5hbWUgPT0gIkJvcnJlbGlhIHNwLiIpDQpib3JyZWxpYTEgPC0gYm9ycmVsaWENCmBgYA0KDQpgYGB7cn0NCmJvcnJlbGlhMiA8LSBmaWx0ZXIoc2l0ZTIsIHRlc3RQYXRob2dlbk5hbWUgPT0gIkJvcnJlbGlhIHNwLiIpDQpgYGANCg0KI3NhdmUgdGhlIHNlcGVyYXRlIHNpdGUgZGF0YQ0KYGBge3J9DQpzYXZlKHNpdGUxLCBmaWxlID0gImRhdGEvc2l0ZTEuUmRhdGEiKQ0Kc2F2ZShzaXRlMiwgZmlsZSA9ICJkYXRhL3NpdGUyLlJkYXRhIikNCnNhdmUoYm9ycmVsaWExLCBmaWxlID0gImRhdGEvYm9ycmVsaWExLlJkYXRhIikNCnNhdmUoYm9ycmVsaWEyLCBmaWxlID0gImRhdGEvYm9ycmVsaWFsLlJkYXRhIikNCmBgYA0KDQoNCiNncmFwaCB0ZXN0cyANCiNncmFwaHMgdXNpbmcgZmlsdGVycw0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUxKSsNCiAgZ2VvbV9qaXR0ZXIobWFwcGluZyA9IGFlcyhkZWNpbWFsZGF0ZSx0ZXN0UmVzdWx0bnVtLGNvbG9yID0gdGVzdFJlc3VsdCkpKw0KICBmYWNldF93cmFwKH50ZXN0UGF0aG9nZW5OYW1lKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpKw0KICB0aGVtZShzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2LCBmYWNlID0gImJvbGQiKSkNCiANCmBgYA0KDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzaXRlMikrDQogIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoZGVjaW1hbGRhdGUsdGVzdFJlc3VsdG51bSxjb2xvciA9IHRlc3RSZXN1bHQpKSsNCiAgZmFjZXRfd3JhcCh+dGVzdFBhdGhvZ2VuTmFtZSkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpKSsNCiAgdGhlbWUoc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgZmFjZSA9ICJib2xkIikpDQpgYGANCg0KI2dyYXBoIHdpdGggc2luZ2xlIGRpc2Vhc2Ugc2l0ZSAxIA0KYGBge3J9DQpnZ3Bsb3QoYm9ycmVsaWEpKw0KICBnZW9tX2ppdHRlcihtYXBwaW5nID0gYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFJlc3VsdCkpKw0KICBmYWNldF93cmFwKH50ZXN0UmVzdWx0KQ0KYGBgDQojZ3JhcGggd2l0aCBzaW5nbGUgZGlzZWFzZSBzaXRlIDINCmBgYHtyfQ0KZ2dwbG90KGJvcnJlbGlhMikrDQogIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0KSkrDQogIGZhY2V0X3dyYXAofnRlc3RSZXN1bHQpDQpgYGANCg0KDQojI1dJUFMNCiNhdGVtcHQgd2l0aCB6b29taW5nIG9uZSB5ZWFyKGRvZXNudCB3b3JrKSANCmBgYHtyfQ0KZmlsdGVyKGRhdGEgPSBib3JyZWxpYSAoeCA9IGRhdGUgIjIwMTctMDMtMjIiLCBkYXRlIDw9ICIyMDE3LTA5LTE1IikrDQogIGdncGxvdChib3JyZWxpYSkrDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHQpKSsNCiAgZmFjZXRfd3JhcCh+dGVzdFJlc3VsdCkNCiAgDQpgYGANCg0KI2dyYXBoIHNlcGVyYXRlIGJ5IHNpdGUgd29ya2luZyBvbiBieSB5ZWFyIChkb2VzbnQgd29yaykNCmBgYHtyfQ0KZ2dwbG90KHNpdGUxKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RQYXRob2dlbk5hbWUpKSsNCiAgZ2VvbV9saW5lKCkrDQogIHNjYWxlX3hfZGF0ZShkYXRlX21pbm9yX2JyZWFrcyA9ICIxIHllYXIiKQ0KYGBgDQoNCiNncmFwaCB0aW1lIHNlcmllcyBmb3IgZGlzZWFzZSBvdmVyIHRpbWUgd2FudCBpbiBibG9ja3MNCiNjb2xvciBieSBkaXNlYXNlIChvbiB5KW9uIGF4aXMgbm8gdGVzdCByZXN1bHQgb25seSBkYXRhLGJsb2NrZWQgb2ZmICh3b3JrcyBraW5kYSkgDQpgYGB7cn0NCmdncGxvdCh0aWNrX3BhdGhvZ2VuKSsNCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSB0ZXN0UmVzdWx0bnVtLCB5ID0gZGVjaW1hbGRhdGUsIGNvbG9yID0gdGVzdFBhdGhvZ2VuTmFtZSkpKw0KICBmYWNldF93cmFwKH50ZXN0UmVzdWx0bnVtKQ0KIA0KYGBgDQoNCiNzZXBlcmF0ZSB5ZWFyIGJvcnJlbGlhMSBvbmx5IA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gYm9ycmVsaWExLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0bnVtKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTQsIDIwMTYpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTEsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxNiwgMjAxNykpDQoNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gYm9ycmVsaWExLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0bnVtKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTcsIDIwMTgpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTEsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxOCwgMjAxOSkpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IGJvcnJlbGlhMSwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFJlc3VsdG51bSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE5LCAyMDIwKSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gYm9ycmVsaWExLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0bnVtKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMjAsIDIwMjEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTEsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAyMSwgMjAyMikpDQpgYGANCg0KI3NlcGVyYXRlIHllYXIgYm9ycmVsaWEyIG9ubHkNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTIsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxNSwgMjAxNikpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IGJvcnJlbGlhMiwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFJlc3VsdG51bSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE2LCAyMDE3KSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gYm9ycmVsaWEyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0bnVtKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTcsIDIwMTgpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTIsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxOCwgMjAxOSkpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IGJvcnJlbGlhMiwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFJlc3VsdG51bSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE5LCAyMDIwKSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gYm9ycmVsaWEyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UmVzdWx0bnVtKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMjAsIDIwMjEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBib3JyZWxpYTIsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RSZXN1bHRudW0pKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAyMSwgMjAyMikpDQpgYGANCg0KI3pvb20gd2l0aCBhbGwgdGhlIGRpc2Vhc2VzIGZyb20gc2l0ZTEgDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc2l0ZTEsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RQYXRob2dlbk5hbWUpKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQyIpKw0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTQsIDIwMTYpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzaXRlMSwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFBhdGhvZ2VuTmFtZSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJDIikrDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxNiwgMjAxOCkpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUxLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UGF0aG9nZW5OYW1lKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkMiKSsNCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE4LCAyMDE5KSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc2l0ZTEsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RQYXRob2dlbk5hbWUpKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQyIpKw0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTksIDIwMjEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzaXRlMSwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFBhdGhvZ2VuTmFtZSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJDIikrDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAyMSwgMjAyMikpDQpgYGANCg0KI3pvb20gYWxsIGRpc2Vhc2UgZnJvbSBzaXRlMg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UGF0aG9nZW5OYW1lKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkMiKSsNCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE1LCAyMDE2KSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc2l0ZTIsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RQYXRob2dlbk5hbWUpKSsNCiAgZ2VvbV9qaXR0ZXIoKSsNCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJIIikrDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxNiwgMjAxNykpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UGF0aG9nZW5OYW1lKSkrDQogIGdlb21faml0dGVyKCkrIA0KICAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJIIikrDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAxNywgMjAxOCkpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UGF0aG9nZW5OYW1lKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkgiKSsNCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDE4LCAyMDE5KSkNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc2l0ZTIsIGFlcyh4ID0gZGVjaW1hbGRhdGUsIHkgPSB0ZXN0UmVzdWx0bnVtLCBjb2xvciA9IHRlc3RQYXRob2dlbk5hbWUpKSsNCiAgZ2VvbV9qaXR0ZXIoKSsgDQogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiSCIpKw0KICBmYWNldF96b29tKHhsaW0gPSBjKDIwMTksIDIwMjApKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzaXRlMiwgYWVzKHggPSBkZWNpbWFsZGF0ZSwgeSA9IHRlc3RSZXN1bHRudW0sIGNvbG9yID0gdGVzdFBhdGhvZ2VuTmFtZSkpKw0KICBnZW9tX2ppdHRlcigpKyANCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJIIikrDQogIGZhY2V0X3pvb20oeGxpbSA9IGMoMjAyMCwgMjAyMSkpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNpdGUyLCBhZXMoeCA9IGRlY2ltYWxkYXRlLCB5ID0gdGVzdFJlc3VsdG51bSwgY29sb3IgPSB0ZXN0UGF0aG9nZW5OYW1lKSkrDQogIGdlb21faml0dGVyKCkrIA0KICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkgiKSsNCiAgZmFjZXRfem9vbSh4bGltID0gYygyMDIxLCAyMDIyKSkNCmBgYA0KDQoNCiNtYXBzDQojbmVlZCB0aGUgZ29vZ2xlIGtleQ0KYGBge3J9DQpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIkFJemFTeUFGajl3blczMzU0WmRxVUNKeU04cG44QVFXZzdNSmMzWSIpDQpgYGANCg0KI21hcCBvZiBzaXRlMiBsb2NhdGlvbiBrYW5hcw0KYGBge3J9DQprcyA8LSBjKGxvbiA9IC05NS4xOTIxNSwgbGF0ID0gMzkuMDQwNDMxKQ0Ka3NfbWFwIDwtIGdldF9tYXAobG9jYXRpb24gPSBrcywgem9vbSA9IDE1KQ0KZ2dtYXAoa3NfbWFwKQ0KYGBgDQoNCiNtYXAgYWdhaW4gem9vbWVkIG91dCBzaXRlMg0KYGBge3J9DQprcyA8LSBjKGxvbiA9IC05NS4xOTIxNSwgbGF0ID0gMzkuMDQwNDMxKQ0Ka3NfbWFwMyA8LSBnZXRfbWFwKGxvY2F0aW9uID0ga3MsIHpvb20gPSA2KQ0KZ2dtYXAoa3NfbWFwMykNCmBgYA0KDQoNCg0KI21hcCB3aXRoIGxvY2FpdG9uIHBvaW50IGthbmFzDQpgYGB7cn0NCmtzX21hcDIgPC0gZ2V0X21hcChsb2NhdGlvbiA9IGBrc2AsIHNvdXJjZSA9ICJzdGFtZW4iLHpvb20gPSA5LCBtYXB0eXBlID0gInRlcnJhaW4iKQ0KZ2dtYXAoa3NfbWFwMikNCg0KZ2dtYXAoa3NfbWFwMikgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBrcywgbWFwcGluZyA9IGFlcyh4ID0gbGF0LCB5ID0gbG9uKSwgc2l6ZSA9IDEwKQ0KYGBgDQoNCiNtYXBzIG9mIHNpdGUxIHZpcmdpbmlhIA0KYGBge3J9DQp2YSA8LSBjKGxvbiA9IC03OC4xNDU0LCBsYXQgPSAzOC44OTM1KQ0KdmFfbWFwIDwtIGdldF9tYXAobG9jYXRpb24gPSB2YSwgem9vbSA9IDEwKQ0KZ2dtYXAodmFfbWFwKQ0KDQpgYGANCg0KI21hcCB3aXRoIGxvY2F0aW9uIGRhdGEgcG9pbnQgKHZpcmdpbmlhKQ0KYGBge3J9DQp2YV9tYXAyIDwtIGdldF9tYXAobG9jYXRpb24gPSBgdmFgLCBzb3VyY2UgPSAic3RhbWVuIix6b29tID0gOSwgbWFwdHlwZSA9ICJ0ZXJyYWluIikNCmdnbWFwKHZhX21hcDIpDQoNCiMgbWFrZSBjb29yZGluYXRlIGludG8gYSBkYXRhZnJhbWUNCnZhX2RmIDwtIGRhdGFfZnJhbWUobG9uID0gYyhOQSwgLTc4LjE0NTQpLCBsYXQgPSBjKE5BLCAzOC44OTM1KSkNCg0KDQpnZ21hcCh2YV9tYXAyKSArDQogIGdlb21fcG9pbnQoZGF0YSA9IHZhX2RmLCBtYXBwaW5nID0gYWVzKHggPSBsYXQsIHkgPSBsb24pLCBzaXplID0gMTApDQpgYGANCg0KDQoNCg0K